﻿using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Media.Imaging;

namespace Flare.DB.Entity
{
    struct Endpoint
    {
        public int? id { get; set; }
        public string name { get; set; }
        public int? id_type { get; set; }
        public int? id_room { get; set; }
        public string net_ip { get; set; }
        public string phone { get; set; }

        public IEnumerable<string> Validate()
        {
            if (id == null)
                yield return "[Идентификатор сетевого узла] должно иметь значение";
            
            if (string.IsNullOrEmpty(name))
                yield return "Поле [ФИО / Название] должно иметь значение";

            if (id_type == null)
                yield return "Поле [Тип сетевого узла] должно иметь значение";

            if (id_room == null)
                yield return "Поле [Кабинет] должно иметь значение";

            if (string.IsNullOrEmpty(net_ip) || !Regex.IsMatch(net_ip, @"\d+\.\d+\.\d+\.\d+"))
                yield return "Поле [IP адрес] не является корректным IP адресом";
        }
    }

    struct EndpointView
    {
        public int id { get; set; }
        public string room { get; set; }
        public string name { get; set; }
        public string phone { get; set; }
        public string ip { get; set; }
        public int id_type { get; set; }
    }

    struct EndpointDetails
    {
        public int id { get; set; }
        public string type { get; set; }
        public int id_type { get; set; }
        public string name { get; set; }
        public string department { get; set; }
        public string room { get; set; }
        public string ip { get; set; }
        public string phone { get; set; }
        public int id_department { get; set; }
        public int id_room { get; set; }
    }

    struct EndpointType
    {
        public int? id_type { get; set; }
        public string type { get; set; }

        public IEnumerable<string> Validate()
        {
            if (id_type == null)
                yield return "[Идентификатор типа узла] должно иметь значение";

            if (string.IsNullOrEmpty(type))
                yield return "Поле [Тип узла] должно иметь значение";
        }
    }

    struct EndpointMap 
    {
        public int? id { get; set; }
        public string dev_name { get; set; }
        public Flare.Controls.NetworkPointType dev_type { get; set; }
        public string dev_ip { get; set; }
        public double pointA_X { get; set; }
        public double pointB_Y { get; set; }
    }

    struct EndpointMapGenerate
    {
        public string name { get; set; }
        public string net_ip { get; set; }
        public int id_type { get; set; }
    }

    struct EndpointCheckHistory
    {
        public DateTime? check_time { get; set; }
        public double? check_graph_h { get; set; }
        public double? check_delay { get; set; }
    }
}
